Software users often desire or require uninterrupted availability and operation of software systems. For example, providers of business software may have customers using the software on an ongoing basis, or may require the software in order to interact with their customers in a desired fashion. In these and other scenarios, it may be inconvenient and unprofitable for software users to experience interruptions or other downtime in software operation.
At the same time, it is also true that software users may need to upgrade, maintain, or otherwise update their software. Although it is possible to implement such updates by stopping some or all operations of the software being updated, such techniques conflict with the above-referenced need to avoid interruptions to the operations of the software.
Some update techniques have been developed in which a copy is made of some or all of the software being updated, so that one version of the software continues to run while the other is updated, and so that a change-over can be executed essentially all at once when the update is complete. Such techniques may require non-trivial amounts of time to complete the copying and updating processes, and may require system experts to administer (e.g., to perform testing, and/or in case an error occurs). Thus, such techniques may be suitable, for example, for large, infrequent changes to sizable software systems that are managed by experts in the updating process.
In many cases, however, day-to-day software users, or other non-expert users, may wish to provide relatively small, relatively frequent changes to their software system(s). In these and similar cases, the lengthy runtimes of existing update techniques may be undesirable or unacceptable, even when system downtime is avoided.